/**
 * Project Name:javaBaseReview
 * Package Name:com.xuwei.base.tree
 * author:David
 * Date:2015年6月16日下午9:20:58
 * Copyright (c) 2015, xw123box@126.com All Rights Reserved.
 *
 */
package com.xuwei.base.tree;
/**
 * 实现二叉树
 * @author David
 * @since 2015年6月16日 下午9:20:58
 * @version 
 * @since JDK 1.6
 */
public class BTree3{
	private BNode root;//根结点
	
	/*拿到根结点*/
	public BNode getRoot() {
		return root;
	}

	public BTree3(){
		root=null;
	}
	
	/*建立二叉树*/
	public void createTree(int[] arr){
		BNode newnode=new BNode();
		root=new BNode();
		root.setVal(arr[0]);
		for(int i=1;i<arr.length;i++){
			if(arr[i]!=-1){
				store(root,arr[i]);
			}
		}
		
	}

	private void store(BNode node, int val) {
		BNode left=node.getlChild();
		BNode right=node.getrChild();
		if(val<node.getVal()){
			if(left==null){
				BNode lchild=new BNode();
				lchild.setVal(val);			
				node.setlChild(lchild);
			}else{
				store(left,val);
			}
		}else{
			if(right==null){
				BNode rchild=new BNode();
				rchild.setVal(val);		
				node.setrChild(rchild);
			}else{
				store(right,val);
			}
		}
	}
	
	/**
	 * 先序遍历(先遍历根结点，再遍历左子树 ，再遍历右子树)
	 */
	public void previousList(BNode node){
		System.out.print(node.getVal() + ",");
		if ( node.getlChild()!= null) {
			previousList(node.getlChild());
		}
		if (node.getrChild()!= null) {
			previousList(node.getrChild());
		}
	}
	
	/**
	 * 中序遍历(先遍历左子树，再遍历 根结点，再遍历右子树)
	 */
	public void middleList(BNode node){
		if ( node.getlChild()!= null) {
			previousList(node.getlChild());
		}
		System.out.print(node.getVal() + ",");
		if (node.getrChild()!= null) {
			previousList(node.getrChild());
		}
	}
	
	/**
	 * 后序遍历(先遍历左子树 ，再遍历右子树，再遍历根结点)
	 */
	public void afterList(BNode node){
		if ( node.getlChild()!= null) {
			previousList(node.getlChild());
		}
		if (node.getrChild()!= null) {
			previousList(node.getrChild());
		}
		System.out.print(node.getVal() + ",");
	}		
	
}